# -*- coding:utf-8 -*-
# @Author:🎈RedBalloon
# @Time:2022/9/28-0:19
# @File:02-Request对象的使用.py
from urllib.request import urlopen, Request
# 这个包是第三方整合好的UA
from fake_useragent import UserAgent

url = 'http://www.baidu.com'

# 伪装请求头,最最基本的反扒
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
}
"""
headers 的参数设置：
User-Agent ：这个头部可以携带如下几条信息：浏览器名和版本号、操作系统名和版本号、默认语言。这个数据可以从 网页开发工具上的请求反应信息中获取(浏览器上一般按 F12 打开开发工具）。作用是用于伪装浏览器。
Referer：可以用来防止盗链，有一些网站图片显示来源 https://*.com ，就是检查 Referer 来鉴定的。
Connection：表示连接状态，记录 Session 的状态。
origin_req_host：请求方的 host 名称或者 IP 地址。
unverifiable：指请求无法验证，默认为 False。用户并没有足够的权限来选择接收这个请求结果，例如请求一个 HTML 文档中的图片，但没有自动抓取图像的权限，这时 unverifiable 为 True。
method：指定请求使用的方法，例如 GET、POST、PUT 等。
"""



# 实例化UserAgent()对象来直接使用
ua = UserAgent()
print(ua.chrome)


# Request 可以理解套了一层壳 使用Request（）来包装请求，再通过urlopen（）获取页面
request = Request(url, headers=headers)
# 很奇怪的获取UA 必须严格安照User-agent的格式才能正确的得到信息
# print(request.get_header('User-agent'))

# 用urlopen来打开设置好伪装的请求
response = urlopen(request)

# 因为read()得到的是byte类型,
html_data = response.read().decode()
# print(html_data)


# 但是如果需要执行更复杂的操作，比如增加HTTP报头，则必须创建一个Request实例来作为urlopen()的参数，而需要访问的url地址则作为Request实例的参数。
# 新建的Request实例，除了必须要有url参数之外，还可以设置另外两个参数：
# 1.data(默认为空)：是伴随url提交的数据(比如post的数据)，同时HTTP请求将从“GET”方式改为“POST”方式。
# 2.headers(默认为空)：是一个字典，包含了需要发送的HTTP报头的键值对。
